#include "uni_iot.h"
#include "uni_pinmux.h"

void uni_pinmux_set_pin(unsigned int offset, unsigned int value, int func_reg_index)
{
    unsigned int RegVal;

    value &= UNI_PINMUX_MASK;
    WRITE(UNI_PINMUX_ADDR_REG, uni_pinmux_func_reg[func_reg_index]);
    RegVal = READ(UNI_PINMUX_DATA_REG);
    RegVal &= ~((UNI_PINMUX_MASK << offset));
    RegVal |= ((value << offset));
    WRITE(UNI_PINMUX_ADDR_REG, uni_pinmux_func_reg[func_reg_index]);
    WRITE(UNI_PINMUX_DATA_REG, RegVal);
    printf("%s: offset = %d, value = 0x%02x, reg = 0x%02x \n", __func__, offset, value, uni_pinmux_func_reg[func_reg_index]);
}

void uni_pinmux_dump_reg()
{
    unsigned int RegVal;
    int i;

    printf("uni pinmux dump:\n");
    for (i = 0; i < UNI_PINMUX_REG_NUM; ++i) {
        WRITE(UNI_PINMUX_ADDR_REG, uni_pinmux_func_reg[i]);
        RegVal = READ(UNI_PINMUX_DATA_REG);
        printf("reg[0x%02x]-----value:0x%08x \n", uni_pinmux_func_reg[i], RegVal);
    }
}

void uni_pinmux_init()
{
    int i;

    for (i = 0; i < UNI_PINMUX_REG_NUM; ++i) {
        WRITE(UNI_PINMUX_ADDR_REG, uni_pinmux_func_reg[i]);
        WRITE(UNI_PINMUX_DATA_REG, uni_pinmux_func_reg_value[i]);
    }
}

